Amazon Linuxでupstartを使ってmonitを止めない方法
止めたくないプロセス
サーバを長時間運用していると何かの拍子にプロセスが落ちてしまうことがあります。そんなときのためにプロセスの死活監視をするわけですが、そのプロセス監視が落ちてしまっては困ります。そこで、今回はupstartを使ってアンデットなプロセスの設定を行いたいと思います。Amazon Linuxには最初からupstartの仕組みが入っています。
monitのセットアップ
お手軽プロセス管理の仕組みを提供してくれるmonitを例に挙げます。まずはセットアップから
$ sudo yum update -y $ sudo yum install monit -y
プロセス監視の設定
プロセス監視の設定ファイルの作成です。今回はApacheの設定を書いてみます。ここではスマートに設定ファイルを作成してみたいと思います。ヒアドキュメントを使って設定ファイルの中身を記述します。1行毎にechoを使わずに書ける点がいい感じです。って、Linux使いの方には常識かもれませんねw。
$ cat << _EOF_ > /etc/monit.d/httpd 2>&1 check process apache with pidfile /var/run/httpd/httpd.pid start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd stop" if 5 restarts within 5 cycles then timeout _EOF_
monit自体の設定
monit自体の設定情報です。
$ sudo su - $ cat << _EOF_ >> /etc/monit.conf set daemon 60 with start delay 60 set httpd port 2812 and use address localhost allow localhost set logfile syslog facility log_daemon _EOF_ $ exit
upstartの設定
monitプロセスが自動起動するようにupstartの設定をします。
$ cat << _EOF_ > /etc/init/monit.conf 2>&1 description "Monit service manager" start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/bin/monit -Ic /etc/monit.conf pre-stop exec /usr/bin/monit -Ic /etc/monit.conf quit _EOF_
cronの設定
monitでは、連続で観測失敗すると不活性状態になります。そこで、1時間に1回再活性化するcronを書いてみましょう。
$ cat << _EOF_ > cron.txt 2>&1 0 */1 * * * /usr/bin/monit monitor all _EOF_
cron情報を作成したのでcrontabに追記します。
$ crontab -l > crontab.tmp $ cat cron.txt >> crontab.tmp $ crontab crontab.tmp $ rm crontab.tmp
プロセスが自動的に再起動するか確認する
monitが止まらないことを確認しましょう。
$ sudo monit -t Control file syntax OK $ sudo initctl stop monit monit start/running, process 3807 $ sudo kill 3807 $ sudo initctl status monit monit start/running, process 3812
アンデットな感じで直ちに立ち上がりますね。
まとめ
今回は、upstartにmonitを登録することで、プロセスが落ちない、または、プロセスが落ちても即座に復帰する仕組みを作りました。今まではinit.dに登録されたプロセスをchkconfigでonにすることで、初回自動起動を行うことができましたが、upstartはさらに細かく挙動を設定することができます。今のところ、Amazon Linux側はinit.dとupstartの両方を見てくれるようなので、今まで通りinit.dで設定する方法を用いつつ、細かいプロセスの挙動を設定したい場合はupstartを使うといった組合せもできると思います。ただし、この仕様はAmazon Linuxの場合ですので、他のLinuxディストリビューションによってはどちらかしか使えないかもしれませんので気をつけて下さい。
参考資料
How can I automatically start a node.js application in Amazon Linux AMI on aws?
Unable to get process to spawn from inittab in Amazon Linux AMI
Amazon EC2でプロセス監視ツールを導入する – monit -